package com.yidu.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.yidu.dao.SnComInventoryMapper;
import com.yidu.dao.SnComPurDetailMapper;
import com.yidu.dao.SnComPurchaseMapper;
import com.yidu.dao.SnReDetailMapper;
import com.yidu.dao.SnRetailMapper;
import com.yidu.dao.SuWhDetailMapper;
import com.yidu.dao.SuWholesaleMapper;
import com.yidu.model.SnComInventory;
import com.yidu.model.SnComPurDetail;
import com.yidu.model.SnReDetail;
import com.yidu.model.SnUser;
import com.yidu.model.SuWhDetail;
import com.yidu.service.CartoGramService;

/**
 * 统计图实现类
 * @author chensituo
 * @date 2018年12月18日 下午9:42:12
 */
@Service
public class CartoGramServiceImpl implements CartoGramService{
	/**
	 * 注入批发mapper
	 */
	@Resource
	SuWholesaleMapper wholesaleMapper;
	/**
	 * 注入零售mapper
	 */
	@Resource
	SnRetailMapper retailMapper;
	/**
	 * 注入批发详情mapper
	 */
	@Resource
	SuWhDetailMapper whDetailMapper;
	/**
	 * 注入零售详情mapper
	 */
	@Resource
	SnReDetailMapper reDetailMapper;
	/**
	 * 注入商品库存mapper
	 */
	@Resource
	SnComInventoryMapper comInventoryMapper;
	/**
	 * 注入商品采购mapper
	 */
	@Resource
	SnComPurchaseMapper comPurchaseMapper;
	/**
	 * 注入商品采购详情mapper
	 */
	@Resource
	SnComPurDetailMapper comPurDetailMapper;
	
	@Override
	public List<Map<String, Object>> findBingAll(String year,SnUser user) {
		//定义一个map集合的list
		List<Map<String, Object>> lists=new ArrayList<>();
		//如果是总公司
		if("123".equals(user.getBraId())) {
			//查询商品销售前十的商品
			List<Map<String, Object>> list=comPurDetailMapper.findBingAll(year);
			//遍历
			for (Map<String, Object> map : list) {
				//创建一个map
				Map<String, Object> maps=new HashMap<>();
				//保存map格式
				maps.put("name", map.get("com_name"));
				maps.put("value",map.get("COUNT"));
				//将map加入集合
				lists.add(maps);
			}
		}else {

			//调用查询饼图所有的方法
			Map<String, Object> mapx=new HashMap<>();
			mapx.put("year", year);
			mapx.put("braId", user.getBraId());
			//查询商品销售前十的商品
			List<Map<String, Object>> list=wholesaleMapper.findBingAll(mapx);
			//遍历
			for (Map<String, Object> map : list) {
				//根据商品id查询数量
				Map<String, Object> map2=new HashMap<>();
				map2.put("comId", map.get("com_id").toString());
				map2.put("braId", user.getBraId());
				//调用批发详情根据商品id和分公司id查询的方法
				Integer rows=wholesaleMapper.findComId(map2);
				//调用零售详情根据商品id和分公司id查询的方法
				Integer rows2=reDetailMapper.findComId(map2);
				//创建一个map
				Map<String, Object> maps=new HashMap<>();
				maps.put("name", map.get("com_name"));
				maps.put("value",rows+rows2);
				//将map加入集合
				lists.add(maps);
			}
		}
		return lists;
	}
	@Override
	public Map<String, Object> findZhuAll(String year, SnUser user) {
		//定义一个map
		Map<String, Object> sumMap=new HashMap<>();
		//定义一个string集合
		List<String> name=new ArrayList<>();
		//月份数组
		String [] arr= {"01","02","03","04","05","06","07","08","09","10","11","12"};
		//创建一个map集合
		List<Map<String, Object>> suMaps=new ArrayList<>();
		//如果是总公司
		if("123".equals(user.getBraId())) {
			//查询业绩前三的商品
			List<Map<String, Object>> list=comPurDetailMapper.findThree();
			for (Map<String, Object> lis : list) {
				//将集合赋值
				name.add(lis.get("com_name").toString());
				//创建一个map
				Map<String, Object> maps=new HashMap<>();
				maps.put("name", lis.get("com_name"));
				maps.put("type", "bar");
				//创建一个int集合
				List<Integer> in=new ArrayList<>();
				//遍历
				for (String string : arr) {
					//创建一个map
					Map<String,Object> aMap=new HashMap<>();
					aMap.put("date", year+"-"+string);
					aMap.put("comId", lis.get("com_id"));
					//调用商品采购详情根据商品id和分公司id查询的方法
					Integer rows=comPurDetailMapper.findZhuAll(aMap);
					int a=0;
					//如果查询到的商品数量不为空
					if(rows!=null && !"".equals(rows)) {
						a=rows;
					}
					//将map加入集合
					in.add(a);
				}
				//将集合添加到map
				maps.put("data",in);
				//将map加入集合
				suMaps.add(maps);
			}
			//将值加入map
			sumMap.put("map", suMaps);
			sumMap.put("name", name);

		}else {
			//查询总销售数量前三的商品
			List<Map<String, Object>> list=wholesaleMapper.findThree(user.getBraId());
			//遍历
			for (Map<String, Object> lis : list) {
				//将集合赋值
				name.add(lis.get("com_name").toString());
				//创建一个map
				Map<String, Object> maps=new HashMap<>();
				maps.put("name", lis.get("com_name"));
				maps.put("type", "bar");
				//创建一个int集合
				List<Integer> in=new ArrayList<>();
				//遍历
				for (String string : arr) {
					//创建一个map
					Map<String,Object> aMap=new HashMap<>();
					aMap.put("date", year+"-"+string);
					aMap.put("comId", lis.get("com_id"));
					aMap.put("braId", user.getBraId());
					//调用批发根据商品id和分公司id查询数量的方法
					Integer rows= wholesaleMapper.findZhuAll(aMap);
					//调用零售根据商品id和分公司id查询数量的方法
					Integer rows2= wholesaleMapper.findZhuAll2(aMap);
					int a=0;
					int b=0;
					//如果批发的数量不为空
					if(rows!=null && !"".equals(rows)) {
						a=rows;
					}
					//如果零售的数量不为空
					if(rows2!=null && !"".equals(rows2)) {
						b=rows2;
					}
					//将map加入集合
					in.add(a+b);
				}
				//将集合添加到map
				maps.put("data",in);
				//将map加入集合
				suMaps.add(maps);
			}
			//将值加入map
			sumMap.put("map", suMaps);
			sumMap.put("name", name);
		}
		return sumMap;
	}
	@Override
	public List<Map<String, Object>> findXianAll(String year,SnUser user) {
		//定义一个月份数组
		String [] arr= {"01","02","03","04","05","06","07","08","09","10","11","12"};
		//销售价
		List<Integer> data=new ArrayList<>();
		//成本价
		List<Integer> datas=new ArrayList<>();
		//创建一个集合
		List<Map<String, Object>> suMaps=new ArrayList<>();
		if("123".equals(user.getBraId())) {

			//遍历
			for (String string : arr) {
				//定义一个变量销售价
				Integer sum=0;
				//成本价
				Integer sum2=0;
				//根据月份查询采购商品详情
				List<SnComPurDetail> list=comPurDetailMapper.findXianAll(year+"-"+string);
				if(!list.isEmpty()) {
					//遍历
					for (SnComPurDetail snComPurDetail : list) {
						//将商品采购详情小计相加
						sum+=snComPurDetail.getPdSum().intValue();
						//创建一个map
						Map<String, Object> maps=new HashMap<>();
						maps.put("comId", snComPurDetail.getComId());
						maps.put("braId", user.getBraId());
						//调用根据商品id查询库存的方法
						List<SnComInventory> comInventory=comInventoryMapper.findComId(maps);
						//如果查询到的集合不为空
						if(!comInventory.isEmpty()) {
							//遍历
							for (SnComInventory snComInventory : comInventory) {
								//将的到的成本价相加
								sum2+=snComInventory.getCiCost().intValue()*snComPurDetail.getPdNumber().intValue();
							}
						}

					}
				}

				//将销售价保存到集合
				data.add(sum);
				//将成本价保存到集合
				datas.add(sum2);

			}

			//销售价map
			Map<String, Object> map=new HashMap<>();
			//保存为统计图格式
			map.put("name", "销售总金额");
			map.put("type", "line");
			map.put("stack", "总量");
			map.put("areaStyle", "");
			map.put("data",data);
			//成本价map
			Map<String, Object> maps=new HashMap<>();
			//保存为统计图格式
			maps.put("name", "销售成本");
			maps.put("type", "line");
			maps.put("stack", "总量");
			maps.put("areaStyle", "");
			maps.put("data",datas);
			
			suMaps.add(map);
			suMaps.add(maps);
		}else {
			//遍历
			for (String string : arr) {
				//定义一个变量销售价
				Integer sum=0;
				//成本价
				Integer sum2=0;
				//查询该月份所有的批发金额
				System.err.println("----------------批发-------------------");
				//创建一个map
				Map<String, Object> mapSum=new HashMap<>();
				mapSum.put("date", year+"-"+string);
				mapSum.put("braId", user.getBraId());
				//根据月份查询批发详情
				List<SuWhDetail> list=whDetailMapper.findXianAll(mapSum);
				if(!list.isEmpty()) {
					//遍历
					for (SuWhDetail suWholesale : list) {
						//将销售价相加
						sum+=suWholesale.getWdSum().intValue();
						//创建一个map
						Map<String, Object> maps=new HashMap<>();
						maps.put("comId", suWholesale.getComId());
						maps.put("braId", user.getBraId());
						//调用根据商品id查询库存的方法
						List<SnComInventory> comInventory=comInventoryMapper.findComId(maps);
						//如果查询到的集合不为空
						if(!comInventory.isEmpty()) {
							//遍历
							for (SnComInventory snComInventory : comInventory) {
								//将得到的成本价相加
								sum2+=snComInventory.getCiCost().intValue()*suWholesale.getWdNumber().intValue();
							}
						}
					}
				}

				//查询该月份所有的零售金额
				System.err.println("----------------零售-------------------");
				//调用根据月份查询零售详情的方法
				List<SnReDetail> lists=reDetailMapper.findXianAll(mapSum);
				//如果集合不为空
				if(!lists.isEmpty()) {
					//遍历
					for (SnReDetail snRetail : lists) {
						//将得到的销售价相加
						sum+=snRetail.getReSum().intValue();
						//创建一个map
						Map<String, Object> maps=new HashMap<>();
						maps.put("comId", snRetail.getComId());
						maps.put("braId", user.getBraId());
						//调用根据商品id查询库存的方法
						List<SnComInventory> comInventory=comInventoryMapper.findComId(maps);
						//如果得到的集合不为空
						if(!comInventory.isEmpty()) {
							//遍历集合
							for (SnComInventory snComInventory : comInventory) {
								//将成本价相加
								sum2+=snComInventory.getCiCost().intValue()*snRetail.getReNumber().intValue();
							}
						}
						
					}
				}

				//将销售价保存到集合
				data.add(sum);
				//将成本价保存到集合
				datas.add(sum2);
			}
			//销售价map
			Map<String, Object> map=new HashMap<>();
			//保存为统计图格式
			map.put("name", "销售总金额");
			map.put("type", "line");
			map.put("stack", "总量");
			map.put("areaStyle", "");
			map.put("data",data);
			//成本价map
			Map<String, Object> maps=new HashMap<>();
			//保存为统计图格式
			maps.put("name", "销售成本");
			maps.put("type", "line");
			maps.put("stack", "总量");
			maps.put("areaStyle", "");
			maps.put("data",datas);


			suMaps.add(map);
			suMaps.add(maps);
		}
		return suMaps;
	}
	@Override
	public Map<String, Object> findLeiAll(String year,SnUser user) {
		//定义一个月份数组
		String [] arr= {"01","02","03","04","05","06","07","08","09","10","11","12"};
		//创建一个map集合
		List<Map<String, Object>> listSum=new ArrayList<>();
		//定义一个map
		Map<String, Object> mapSum=new HashMap<>();
		//定义一个string集合
		List<String> name=new ArrayList<>();
		//如果是总公司
		if("123".equals(user.getBraId())) {
			//调用采购商品查询前5商品的方法
			List<Map<String,Object>> list=comPurDetailMapper.findLeiAll();
			//遍历
			for (Map<String, Object> map : list) {
				//将得到的商品名称封装
				name.add(map.get("com_name").toString());
				//创建一个map
				Map<String, Object> maps=new HashMap<>();
				//创建一个int集合
				List<Integer> listInt=new ArrayList<>();
				//遍历时间数组
				for (String string : arr) {
					//创建一个map
					Map<String,Object> aMap=new HashMap<>();
					aMap.put("date", year+"-"+string);
					aMap.put("comId", map.get("com_id"));
					//调用商品采购根据商品id和时间月份查询的方法
					Integer rows=comPurDetailMapper.findZhuAll(aMap);
					int a=0;
					//如果得到的商品数量不为空
					if(rows!=null && !"".equals(rows)) {
						a=rows;
					}
					//将数量添加到集合
					listInt.add(a);
				}
				//将数据添加到map
				maps.put("name", map.get("com_name"));
				maps.put("value", listInt);
				listSum.add(maps);
			}
			mapSum.put("list", listSum);
			mapSum.put("name", name);
		}else {

			//查询批发零售总销量前五的商品
			List<Map<String,Object>> list=wholesaleMapper.findLeiAll(user.getBraId());
			//遍历
			for (Map<String, Object> map : list) {
				//将得到的商品名称封装
				name.add(map.get("com_name").toString());
				//创建一个map
				Map<String, Object> maps=new HashMap<>();
				//创建一个int集合
				List<Integer> listInt=new ArrayList<>();
				//遍历时间数数组
				for (String string : arr) {
					//创建一个map
					Map<String,Object> aMap=new HashMap<>();
					aMap.put("date", year+"-"+string);
					aMap.put("comId", map.get("com_id"));
					aMap.put("braId", user.getBraId());
					//调用批发详情根据月份与商品id查询行数的方法
					Integer rows= wholesaleMapper.findZhuAll(aMap);
					//调用零售详情根据月份与商品id查询行数的方法
					Integer rows2= wholesaleMapper.findZhuAll2(aMap);
					int a=0;
					int b=0;
					//如果查询批发的数量不为空
					if(rows!=null && !"".equals(rows)) {
						a=rows;
					}
					//如果查询零售的数量不为空
					if(rows2!=null && !"".equals(rows2)) {
						b=rows2;
					}
					//将行数添加到集合
					listInt.add(a+b);
				}
				//将数据封装到map
				maps.put("name", map.get("com_name"));
				maps.put("value", listInt);
				listSum.add(maps);
			}
			mapSum.put("list", listSum);
			mapSum.put("name", name);
		}
		return mapSum;
	}
}
